
// System headers
#include "stm32f10x.h"
#include "stm32f10x_exti.h"

// My headers
#include "main.h"
#include "led.h"
#include "button.h"
#include "delay_util.h"
#include "usart.h"


int main(void) {
    GeneralInit();

    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    GPIOC->BSRR = GPIO_Pin_9;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    uint32_t Tmr;
    bool KWP;
    while (1) {
        if(Delay.Elapsed(&Tmr, 100)){
            Usart.Send('A');
            if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) && !KWP){
                GPIOC->ODR ^= GPIO_Pin_9;
                KWP = true;
            }
            else if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) && KWP) KWP = false;
        }
    }
}

void GeneralInit(void) {
    Delay.Init();
    Usart.Init();
}
